import { defineStore } from 'pinia'
import { getUserMenus } from '@/api/menu'

export const useUserStore = defineStore('user', {
    state: () => ({
        token: '',
        userInfo: null,
        menus: [],      // 菜单结构
        menuData: []    // 原始菜单数据
    }),

    actions: {
        setToken(token) {
            this.token = token
        },
        setUserInfo(info) {
            this.userInfo = info
        },
        // 获取用户菜单并处理数据
        async getMenus() {
            try {
                const data = await getUserMenus()
                this.menuData = data // 保存原始数据
                // 处理菜单数据
                this.menus = this.formatMenus(data)
                return this.menus
            } catch (error) {
                console.error('获取菜单失败:', error)
                return []
            }
        },
        // 格式化菜单显示结构
        formatMenus(menus) {
            // 先按 sort 排序
            const sortedMenus = [...menus].sort((a, b) => a.sort - b.sort)

            // 找出所有父菜单
            const parentMenus = sortedMenus.filter(item => item.parentId === 0)

            // 递归处理子菜单
            const formatMenuItem = (menu) => {
                const result = {
                    path: menu.url,          // 使用 url 字段作为路径
                    title: menu.title,
                    icon: menu.icon,
                    name: menu.url           // 使用 url 作为 name
                }

                // 查找当前菜单的子菜单
                const children = sortedMenus
                    .filter(item => item.parentId === menu.id)
                    .sort((a, b) => a.sort - b.sort)
                    .map(item => formatMenuItem(item))

                if (children.length) {
                    result.children = children
                }
                return result
            }

            return parentMenus.map(menu => formatMenuItem(menu))
        },
        // 生成路由结构
        generateRoutes(menus = this.menuData) {
            // 先按 sort 排序
            const sortedMenus = [...menus].sort((a, b) => a.sort - b.sort)

            // 找出所有父菜单
            const parentMenus = sortedMenus.filter(item => item.parentId === 0)

            // 递归处理路由
            const formatRoute = (menu) => {
                const route = {
                    path: menu.url,          // 直接使用 url 作为路径
                    name: menu.url,          // 使用 url 作为 name
                    meta: {
                        title: menu.title,
                        icon: menu.icon
                    }
                }

                // 如果有组件路径，则导入组件
                if (menu.component) {
                    route.component = () => import(`@/views${menu.component}.vue`)
                }

                // 查找子路由
                const children = sortedMenus
                    .filter(item => item.parentId === menu.id)
                    .sort((a, b) => a.sort - b.sort)
                    .map(item => formatRoute(item))

                if (children.length) {
                    route.children = children
                }

                return route
            }

            return parentMenus.map(menu => formatRoute(menu))
        },
        // 登出
        logout() {
            this.token = ''
            this.userInfo = null
            this.menus = []
            this.menuData = []
        }
    },
    persist: {
        key: 'user',
        storage: localStorage,
        // 使用 pick 替代 paths
        pick: ['token', 'userInfo']
    }
}) 